Computer systems often include one or more central processing units (CPUs) and one or more data parallel devices (e.g., graphics processing units (GPUs)). CPUs and data parallel devices typically operate using different instruction sets defined by their respective architectures such that CPU instructions may not be executable on data parallel devices and vice versa. CPUs generally perform all general purpose processing on computer systems, and data parallel devices generally perform data parallel processing (e.g., graphics processing) on computer systems.
Because of their different instructions sets and functions, CPUs and data parallel devices are often programmed using different high-level programming languages. For example, a CPU may be programmed using general purpose programming languages such as C or C++, and a data parallel device, such as a graphics processing unit (GPU), may be programmed using data parallel device programming languages, such as HLSL, GLSL, or Cg. Data parallel device programming languages, however, often have limitations that are not found in CPU programming languages. These limitations stem from the supporting role that data parallel devices have played to CPUs in executing programs on computer systems. As the role of data parallel devices increases due to enhancements in data parallel device processing capabilities, it would be desirable to enhance the ability of programmers to program data parallel devices.